package fr.gestproj.bean.referentiel;

import java.util.List;

import org.primefaces.model.LazyDataModel;

import fr.gestproj.commun.interfaces.IBeanReferentiel;
import fr.gestproj.facade.AbstractFacade;
import fr.gestproj.utils.UtilsJsf;

public abstract class AbstractBeanReferentiel<T, U extends AbstractFacade, V extends LazyDataModel> implements IBeanReferentiel {

	protected List<T> selection;
	protected T entite;
	protected U facade;
	protected V datamodel;
	private Class<T> entiteClass;
	private Class<V> datamodelClass;

	public AbstractBeanReferentiel() {
	}

	public void init(U facade, Class<T> entiteClass, Class<V> datamodelClass) {
		this.facade = facade;
		this.datamodelClass = datamodelClass;
		this.entiteClass = entiteClass;
		rechercher();
	}

	public void rechercher() {
		try {
			datamodel = datamodelClass.newInstance();
		} catch (Exception e) {
			UtilsJsf.ajoutMessageError("Erreur lors de l'instanciation du datamodel %s", datamodelClass);
		}
	}

	public void initAjouter() {
		try {
			entite = entiteClass.newInstance();
		} catch (Exception e) {
			UtilsJsf.ajoutMessageError("Erreur lors de l'instanciation de la classe %s", entiteClass);
		}
	}

	public void editer() {

	}

	public void supprimer() {

	}

	public List<T> getSelection() {
		return selection;
	}

	public void setSelection(List<T> selection) {
		this.selection = selection;
	}

	public T getEntite() {
		return entite;
	}

	public void setEntite(T entite) {
		this.entite = entite;
	}

	public V getDatamodel() {
		return datamodel;
	}

	public void setDatamodel(V datamodel) {
		this.datamodel = datamodel;
	}
}
